package xx.services.page.inter;

import javax.ws.rs.FormParam;
import javax.ws.rs.PathParam;
import javax.ws.rs.QueryParam;

/**
 * page页面导航管理服务接口
 * 
 * @Path (Constants.RESTFUL_ROOT_PATH + "/page/navigation")
 * @author chenxiang 2010-12-21
 */
public interface INavigationInterface
{
    /**
     * 获取指定{categoryId}第一级分组
     * 
     * @GET
     * @Path ("/{category_id}/children")
     * @param categoryId-@PathParam("category_id")
     *            分类ID
     * @param jsonkeys-@QueryParam("jsonkeys")
     *            相关JSONkey
     * @return 分类列表
     */
    public String getChildren(@PathParam("category_id")
    long categoryId, @QueryParam("jsonkeys")
    String jsonkeys);

    /**
     * 获取指定分组信息
     * 
     * @GET
     * @Path ("/{category_id}")
     * @param categoryId-@PathParam
     *            ("category_id") 分类ID
     * @return 分类实体
     */
    public String getInfo(@PathParam("category_id")
    long categoryId);

    /**
     * 在指定分类{category_id}下增加子分类，
     * 
     * @POST
     * @Path("/{category_id}")
     * @param categoryId-@PathParam("category_id")
     *            分组ID
     * @param name-@FormParam("name")
     *            分组名称
     * @param sortId-@FormParam("sort_category_id")
     *            兄弟节点ID（>0时，表示把新增的分组排在categoryId的后边，<0时，表示把新增的分组排在categoryId的前边，=0时，表示排在最后边）
     * @param description-@FormParam("description")
     *            分类描述
     * @param pageId-@FormParam("page_id")
     *            与分组关联的页面ID
     * @param url-@FormParam("url")
     *            关联的URL地址
     * @param target-@FormParam("target")
     *            打开窗口的方式，参见A标签的target属性值
     * @return 新分类实体json数据
     */
    public String add(@PathParam("category_id")
    long categoryId, @FormParam("name")
    String name, @FormParam("sort_category_id")
    long sortId, @FormParam("description")
    String description, @FormParam("page_id")
    long pageId, @FormParam("url")
    String url, @FormParam("target")
    String target);

    /**
     * 修改分类
     * 
     * @PUT
     * @Path ("/{category_id}")
     * @param name-@FormParam("name")
     *            分组名称
     * @param description-@FormParam("description")
     *            分类描述
     * @param pageId-@FormParam("page_id")
     *            与分组关联的页面ID
     * @param url-@FormParam("url")
     *            关联的URL地址
     * @param target-@FormParam("target")
     *            打开窗口的方式，参见A标签的target属性值
     * @return 新分类实体json数据
     */
    public String modify(@PathParam("category_id")
    long categoryId, @FormParam("name")
    String name, @FormParam("description")
    String description, @FormParam("page_id")
    long pageId, @FormParam("url")
    String url, @FormParam("target")
    String target);

    /**
     * 删除分类
     * 
     * @DELETE
     * @Path ("/{category_id}")
     * @param categoryId-@PathParam("category_id")
     *            分类ID，多个ID用“_”隔开
     * @return true-删除成功，string-其他删除失败（string就是失败原因）
     */
    public String delete(@PathParam("category_id")
    String categoryId);
    
   /**
    * 将导航categoryId排在导航beforeId的前边。如果beforeId=0，表示将导航categoryId前移一位
    * @Put
    * @Path("/{category_id}/before/{before_id}")
    * @param categoryId
    * @param beforeId
    * @return
    * @author dengjinye 2011-9-13
    */ 
    public String sortBefore(long categoryId,long beforeId);
    
    /**
     * 将导航categoryId排在导航afterId的后边。如果afterId=0，表示将导航categoryId后移一位
     * @Put
     * @Path("/{category_id}/after/{after_id}")
     * @param categoryId
     * @param afterId
     * @return
     * @author dengjinye 2011-9-13
     */
    public String sortAfter(long categoryId,long afterId);
}
